#pragma once
#include "al_IAbilityOwner.h"
//#include "al_IAbilityTarget.h"

namespace ability_core
{
/**
Class:		IAbilityInstance
Purpose:	Allows access to Instance Specifics of an ability
Usage:		Extends default ability templates - Client shouldn't use		
**/

//Hide//	//change IEntity - IAbilityUser
class IAbilityInstance
{
public:

	virtual ability::IAbilityOwner * getOwner() = 0;
	virtual bool isEnabled(long int currentTime) = 0;

	virtual void use(long int currentTime) = 0;
	virtual void selectTarget(void * ePtr) = 0;//(IEntity* ePtr) = 0;
	virtual bool isCooledDown(long int currentTime) = 0;
	virtual void setCooldown(long int startTime) = 0;
	virtual int	 getAmount() = 0;
	virtual void setAmount(int amount) = 0;

	virtual ~IAbilityInstance(){}
};
}